#include "dir.h"
#include <string>
#include <iostream>
#include<sys/stat.h>

using namespace std;


CEntry* MakeEntry(const string &name) {
  struct stat s;
  lstat(name.c_str(),&s);

  if (S_ISREG(s.st_mode)) {
//    if (name.find(".xml") != string::npos)
//      return new CWikiDump(name);
// там лежит xml, который не викидамп ... на нём читалка викидампа вешается

    if (name.find(".tar.bz2") != string::npos || name.find(".zip") != string::npos)
      return new CArch(name);
  }
  if (S_ISDIR(s.st_mode))
    return new CDir(name);

  cerr << "can't make entry " << name << endl;

  return new CEntry(name); // если ничего не получилось, то делаем обычный CEntry
};

void PrintTree(IDir *pdir, int i) {
  IDir::iterator it = pdir->begin();
  while(pdir->end() != it) {
    cout << (*it)->Name() << endl;

    IDir* m=dynamic_cast<IDir*>(*it);
    if (NULL != m) {
      PrintTree(m, i+1);
    }

    it++; 
  }
}

int main() {
  CEntry* a = MakeEntry("/data/");
  PrintTree((IDir*)a, 0);	
  return 0;
}
